package com.kashow.injector.component;

import android.content.Context;

import com.kashow.AppContext;
import com.kashow.AppManager;
import com.kashow.api.ApiService;
import com.kashow.api.WeChatApiService;
import com.kashow.base.ChatSocketManager;
import com.kashow.base.SocketManager;
import com.kashow.base.cookie.PersistentCookieStore;
import com.kashow.base.rx.RxManager;
import com.kashow.cache.Providers;
import com.kashow.cache.Repository;
import com.kashow.injector.ContextLife;
import com.kashow.injector.module.ApplicationModule;
import com.kashow.rx.RxPushAgent;
import com.kashow.rx.RxQiniuCDN;
import com.kashow.rx.RxSecurePreferences;
import com.qiniu.android.storage.UploadManager;
import com.securepreferences.SecurePreferences;
import com.umeng.message.PushAgent;

import javax.inject.Singleton;

import dagger.Component;
import io.socket.client.Socket;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;

@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
    @ContextLife("Application")
    Context getContext();

    OkHttpClient getOkHttpClient();

    Retrofit getRetrofit();

    ApiService getApiService();

    Socket getSocket();

    RxManager getRxManager();

    UploadManager getUploadManager();

    Providers getProviders();

    Repository getRepository();

    RxQiniuCDN getRxQiniuCDN();

    PushAgent getPushAgent();

    RxPushAgent getRxPushAgent();

    WeChatApiService getWeChatApiService();

    AppManager getAppManager();

    SocketManager getSocketManager();

    SecurePreferences getSecurePreferences();

    RxSecurePreferences getRxSecurePreferences();

    PersistentCookieStore getPersistentCookieStore();

    AppContext getAppContext();

    ChatSocketManager getChatSocketManager();

    void inject(AppContext AppContext);
}
